/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.futco.sysconthos.Modelo.Procesos.Daos;

import org.futco.sysconthos.Modelo.Admisiones.Daos.IDAO;
import org.futco.sysconthos.Modelo.Admisiones.Daos.Model;
import org.futco.sysconthos.Modelo.Proceso.Especialidad;
import com.mysql.jdbc.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author randy fernando
 */
public class EspecialidadDAO implements IDAO<Especialidad>{
    private Model model;
    private PreparedStatement psInsert;

    public EspecialidadDAO() throws SQLException {
        model = Model.getInstance();
    }


    public void insert(Especialidad t) throws SQLException {
         if (psInsert == null) {
            String sqlInsert = "INSERT INTO especialidad (nombre, codigo) VALUES (?,?)";
            psInsert = (PreparedStatement) model.getCon().prepareStatement(sqlInsert);

        psInsert.setString(1, t.getNombre());
        psInsert.setString(2, t.getCodigo());
        psInsert.executeUpdate();
        }
    }

    public void delete(Especialidad t) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Especialidad> getAll() throws SQLException {
      Especialidad pro=null;
      PreparedStatement ps=null;
      ResultSet rs=null;
      List lista= new LinkedList();

      try{
          String sqlInsert = "Select * from especialidad";
          ps=(PreparedStatement) model.getCon().prepareStatement(sqlInsert);
          rs=ps.executeQuery();
          while(rs.next()){
              pro=this.loadEspecialidad(rs);
              lista.add(pro);

          }

      }finally{
          if(rs!=null){
              rs.close();
          }
          if(ps!=null){
              ps.close();
          }
      }
      return lista;
    }

    public Especialidad find(String cod) throws SQLException {
       java.sql.PreparedStatement pst =  null;
        Especialidad e  = new Especialidad();
        ResultSet rs = null;
        if(!model.isConnect())
        {
            throw new SQLException(":V");
        }
        pst = model.getCon().prepareStatement("Select * from especialidad where codigo = ?");
        pst.setString(1, cod.trim());
        rs = pst.executeQuery();
        if(rs.next())
        {
          
          e=this.loadEspecialidad(rs);
        }
        if(rs != null)
        {
            model.getCon().close();
        }
        pst.close();
        rs.close();
        return e;
    }

    public void update(String codigo, Especialidad t) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    private Especialidad loadEspecialidad(ResultSet rs) throws SQLException {

      Especialidad e=new Especialidad();
      e.setCodigo(rs.getString(1));
      e.setNombre(rs.getString(2));
        
      return e;
    }

    public List<Especialidad> getAllBy(String t, String n) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Especialidad find(Integer id) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

     public List<Especialidad> getAllByEspecialidad(String codPac) throws SQLException {
        List lista = new LinkedList<Especialidad>();
        java.sql.PreparedStatement pst = null;
        ResultSet rs = null;
        Especialidad c = null;

        try {

            pst = model.getCon().prepareStatement("SELECT DISTINCT e.* from especialidadMedico em, medico m, especialidad e where em.codEspecialidad=e.codigo AND em.codMedico=?");
            pst.setString(1,  codPac.trim());

            rs = pst.executeQuery();

            while (rs.next()) {
              c=this.loadEspecialidad(rs);
              lista.add(c);
            }

        } finally {
            if (pst != null) {
                pst.close();
            }
            if (rs != null) {
                rs.close();
            }
        }
        return lista;
    }

    
}
